GIT - https://git.gosuslugi.local/ervu/source/s3-proxy/
Требование
https://jira.egovdev.ru/browse/ERVU-8660
Описание
Задача - https://jira.egovdev.ru/browse/ERVU-8660
Требование: уйти от прямых ссылок на скачивание \ предпросмотр файлов, перевести работу фронта с s3-хранилищем на прокси-сервис (этот), доступ к которому скрыт за proxy-gateway.
Сервис для работы фронта с s3, предоставляет эндпоинты для скачивания, загрузки, архивации и извлечения файлов. В контуре, как и остальные сервисы фронта, сервис скрыт за proxy-gateway.
REST
|GET| ./download/v1
Выгрузка файла из s3 хранилища, вернёт стрим файла
Строковые параметры (query string) запроса
- s3Link - s3 url encoded или decoded ссылка на файл
- fileName - Оригинальное имя файла (для хедера Content-Disposition: attachment; filename = ...) Если параметр присутствует, то файл сохранится под этим именем, если отсутствует, то пробуем найти это имя в юзер-метадате запрашиваемого файла под ключом 'name' (логика mz-adapter), если и там не нашли, то вернётся текущее имя файла из хранилища
Тело ответа: содержимое файла.
Хедеры ответа:
content-type - binary/octet-stream
content-disposition - имя файла по спецификации RFC 6266
Пример запроса
./s3-proxy/download/v1?s3Link=s3://bucket/actualName.zip&fileName=rightName.zip
Пример curl
curl --request GET \ --url 'http://localhost:8080/download/v1?s3Link=s3%3A%2F%2Fbucket%2Ffilename.zip&fileName=rightName.zip' \ --header 'Authorization: Bearer TOKEN' |
|PUT| ./upload/v1
Загружает файл в s3 хранилище, добавляет суффикс к имени файла, чтобы поддержать уникальные имена в хранилище, возвращает s3 ссылку, вида s3://bucket/objectKey-{suffix}.{extension}, пример - s3://printer/filename-0123456789.zip
Строковые параметры запроса
- objectKey - ключ объекта для сохранения, может быть пустой, в этом случае будет использовано имя загружаемого файла, может быть составной ключ, вида "2025/05/01/filename.txt", тогда в хранилище будет создана соответствующая структура "папок" и итоговая ссылка будет вида s3://bucket/2025/05/01/filename-{suffix}.txt
- bucket - бакет для сохранения файла, может быть пустой, в этом случае будет использован дефолтный
Тело запроса
- file - multipart/form-data контент файла
Тело ответа
- s3Link - ссылка на файл в s3 хранилище
Пример запроса
./s3-proxy/upload/v1?objectKey=testfile321.zip&bucket=proxy
Пример ответа
Пример curl
curl --request PUT \ --header 'Authorization: Bearer TOKEN' \ --header 'content-type: multipart/form-data' \ --form 'file=@C:\Users\AdminLocal\Desktop\example.xml' |
|POST| ./archive/v1
Синхронно создает zip-архив из объектов с указанными URL и отдает клиенту ответ с ссылкой в s3 на архив, также отправляет ответ в топик s3proxy.archive
Тело запроса
- objectUrls - массив s3 ссылок на файлы для архивации
- resultArchiveObjectKey - имя файла для итогового архива, если такой файл уже существует в хранилище - вернётся ошибка
Тело ответа
- success - флаг успешности операции
- s3Url - s3 ссылка на итоговый архив
- dateTime - время окончания операции
Пример запроса
./s3-proxy/archive/v1
Пример ответа
Пример curl
curl --request POST \ --url http://localhost:8080/archive/v1 \ --header 'Authorization: Bearer TOKEN' \ --header 'content-type: application/json' \ --data '{ "objectUrls": [ "s3://bucket/file1.zip", "s3://bucket/file2.zip" ], "resultArchiveObjectKey":"resultArchive.zip"}' |
|POST| ./archive-async/v1
Асинхронно создает zip-архив из объектов с указанными URL, отправляет ответ в топик s3proxy.archive
Тело запроса
- objectUrls - массив s3 ссылок на файлы для архивации
- resultArchiveObjectKey - имя файла для итогового архива, если такой файл уже существует в хранилище - вернётся ошибка
Тело ответа контроллера
- success - флаг успешности операции
Тело ответа сообщения в кафку
- success - флаг успешности операции
- s3Url - s3 ссылка на итоговый архив
- dateTime - время окончания операции
Пример запроса
./s3-proxy/archive-async/v1
Пример ответа контроллера
Пример ответа в кафку
Пример curl
curl --request POST \ --url http://localhost:8080/archive-async/v1 \ --header 'Authorization: Bearer TOKEN' \ --header 'content-type: application/json' \ --data '{ "objectUrls": [ "s3://bucket/file1.zip", "s3://bucket/file2.zip" ], "resultArchiveObjectKey":"resultArchive.zip"}' |
|POST| ./archive-download/v1
Создает zip-архив из объектов с указанными URL и отдает клиенту, вернёт стрим файла
Тело запроса
- objectUrls - массив s3 ссылок на файлы для архивации
Тело ответа: содержимое файла (созданный архив).
Хедеры ответа:
content-type - binary/octet-stream
content-disposition - имя файла по спецификации RFC 6266
Пример запроса
./s3-proxy/archive-download/v1
Пример curl
curl --request POST \ --url http://localhost:8080/archive-download/v1 \ --header 'Authorization: Bearer TOKEN' \ --header 'content-type: application/json' \ --data '{ "objectUrls": [ "s3://bucket/file1.zip", "s3://bucket/file2.zip" ]}' |
|GET| ./extract/v1
Выгружает архив из s3 хранилища, распаковывает, определяет и отдаёт нужный файл, вернёт стрим файла
Строковые параметры (query string) запроса
- s3Link - s3 url encoded или decoded ссылка на файл
- type - указатель на тип файла, enum {file / sign}, file - для получения основного файла (.pdf), sign - для получения файла подписи (.sig)
Тело ответа: содержимое распакованного файла.
Хедеры ответа:
content-type - binary/octet-stream
content-disposition - имя файла по спецификации RFC 6266
Пример запроса
./s3-proxy/extract/v1?s3Link=s3://bucket/filename.zip&type=sign
Пример curl
curl --request GET \ --header 'Authorization: Bearer TOKEN' |
Добавить комментарий